package com.dhcc.DRGsHosp.facade.impl;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.inject.Named;

import org.openkoala.security.shiro.CurrentUser;
import org.springframework.beans.factory.annotation.Autowired;

import com.dhcc.DRGsHosp.application.MrqDictDetailApplication;
import com.dhcc.DRGsHosp.application.MrqDictWeightApplication;
import com.dhcc.DRGsHosp.core.domain.MrqDictDetail;
import com.dhcc.DRGsHosp.facade.MrqDictDetailFacade;
import com.dhcc.DRGsHosp.infra.util.DrgsIndex;

/**
 * 得分项目字典信息--业务逻辑层--实体类
 * @ClassName: MrqDictDetailFacadeImpl  
 * @Description ：    
 * @Date: 2018年8月7日 下午2:37:05  
 * @Author QiaoYiLong 
 * @Version 3.1.1 DHC-DRG
 */

@Named("drgsHospMrqDictDetailFacadeImp20180807")
public class MrqDictDetailFacadeImpl implements MrqDictDetailFacade {

	@Autowired
	private MrqDictDetailApplication  mrqDictDetailApplication;

	@Autowired
	private MrqDictWeightApplication  mrqDictWeightApplication;

	/**
	 *  功能描述： 根据scoreCode（四大类分项编码）取得该分项对应的所有得分项目字典信息（显示数据表格用）
	 *  @param scoreCode 四大类分项编码
	 *  @Author QiaoYiLong  
	 */
	@Override
	public Map<String, List<Map<String, Object>>> getShowTableInfoByScoreCode(String scoreCode) {
		Map<String, List<Map<String, Object>>> tableInfoMap = new HashMap<String,List<Map<String, Object>>>();
		//取得得分项目字典信息
		List<Map<String, Object>> detailList = mrqDictDetailApplication.getShowTableInfoByScoreCode(scoreCode);
		for(Map<String, Object> map : detailList){
			String key = (String)map.get("SCORE_CODE");
			if(tableInfoMap.containsKey(key)){
				List<Map<String, Object>> linkMap = tableInfoMap.get(key);
				linkMap.add(map);
			}else{
				List<Map<String, Object>> linkMap = new ArrayList<Map<String, Object>>();
				linkMap.add(map);
				tableInfoMap.put(key, linkMap);
			}
		}
		return tableInfoMap;
	}
	/**
	 *  功能描述：根据主键值detailCode修改字段field的值
	 *  @Author QiaoYiLong
	 *  @param detailCode 主键
	 *  @param field  字段名称
	 *  @param value  字段值
	 *  @return sql执行成功修改的数据条数
	 *  @Date:2018年8月9日下午2:37:30
	 */
	@Override
	public int modifyField(String detailCode,String field,String value){
		int count = 0;
		count = mrqDictDetailApplication.modifyField(detailCode, field, value);
		if(count>0){
			MrqDictDetail mdd = mrqDictDetailApplication.getMrqDictDetail(detailCode);
            String str = "修改质控字典--"+DrgsIndex.formateDateFrom(null)+"--  名称："+CurrentUser.getName()+",  账号："+CurrentUser.getUserAccount()+",  角色："+CurrentUser.getRoleName()
        	+",  操作：将 MRQ_DICT_DETAIL 表里面detail_name为"+mdd.getDetailName()+"  rule_code="+detailCode+" 的记录的 "+field+" 值设置为 "+value+" \r\n";
			recordOperationLog(str);
		}		
		return count;
	}

	/**
	 * 记录操作日志
	 * @param operation  操作内容
	 * @Author QiaoYiLong
	 * @Date:2018年9月13日上午9:03:30
	 */
	@Override
	public void recordOperationLog(String operation){
		if(null==operation || "".equals(operation) || operation.length()< 1) return ;
		//如果操作成功，则将操作内容记录到操作日志中
        File file = null;
        FileWriter fw = null;
		file = new File(MrqDictRulesFacadeImpl.class.getResource("/").getPath() + "mrqOperateLog/operateLog.txt");
		try{
			File fileParent = file.getParentFile();
			if(!fileParent.exists()){
				fileParent.mkdirs();
			}
            if (!file.exists()) {
                file.createNewFile();
            }
            // 打开一个写文件器，构造函数中的第二个参数true表示以追加形式写文件 
            fw = new FileWriter(file, true);
            fw.write(operation);
            fw.flush();
		}catch(Exception e){
			e.printStackTrace();
		}finally{
            if(fw != null){
                try {
                    fw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
		}
	}
	
	/**
	 *  功能描述： 取得MRQ_DICT_SCORE表的所有大类信息
	 *  @Date:2018年12月26日下午4:21:02
	 */
	public List<Map<String, Object>> getAllMrqDictScore(){
		String hospName = mrqDictWeightApplication.getHospName();
		return mrqDictDetailApplication.getAllMrqDictScore(hospName);
	}
}
